package com.go.service.base;

import com.jfinal.plugin.activerecord.Page;

/**
 * 逻辑层基础接口
 * @author lyb
 *
 * @param <T> model
 * @param <K> 主键类型
 */
public interface IBaseService<T,K> {
	
	/**
	 * 根据主键获取数据
	 * @author lyb
	 * @param id
	 * @return
	 */
	T findById(K id);
	/**
	 * 获取符合条件的第一条数据
	 * @author lyb
	 * @param sql sql语句
	 * @return
	 */
	T findFirst(String sql);
	/**
	 * 根据主键删除(物理删除)
	 * @author lyb
	 * @param id
	 * @return
	 */
	boolean deleteById(K id);
	/**
	 * 根据主键删除(物理删除) 多个删除
	 * @author lyb
	 * @param id
	 * @return
	 */
	boolean deleteById(@SuppressWarnings("unchecked") K...idValues);
	/**
	 * 修改状态(状态字段列名为：status)
	 * @author lyb
	 * @param status 状态值
	 * @return
	 */
	int updateStatus(Object status,K id);
	/**
	 * 单表分页查询数据(不带查询条件)
	 * @author lyb
	 * @param pageNumber   第几页
	 * @param pageSize     每页几条记录
	 * @param orderColoum  序的字段(不排序填null)
	 * @param desc         是否倒序
	 * @return
	 */
	Page<T> paginate(int pageNumber,int pageSize,String orderColoum,boolean desc);
}
